package br.com.diego.system.view.action.usuario;

import br.com.diego.system.controller.cadastrocomponente.ComponenteVo;
import br.com.diego.system.controller.cadastrousuario.CadastroUsuarioBuilder;
import br.com.diego.system.controller.cadastrousuario.CadastroUsuarioFactory;
import br.com.diego.system.controller.cadastrousuario.CadastroUsuarioVo;
import br.com.diego.system.view.action.AbstractDiegoAction;
import br.com.diego.system.view.action.principal.PrincipalAction;
import br.com.diego.system.view.navigator.Navigator;
import br.com.diego.system.view.navigator.usuario.Pages;
import org.springframework.beans.factory.annotation.Autowired;

public class CadastroUsuarioAction extends AbstractDiegoAction {

    @Autowired
    private CadastroUsuarioBuilder cadastroUsuarioBuilder;
    
    @Autowired
    private CadastroUsuarioFactory cadastroUsuarioFactory;
    
    @Autowired
    private PrincipalAction principalAction = new PrincipalAction();
    
    private CadastroUsuarioVo cadastroUsuarioVo = new CadastroUsuarioVo();
    
    public void limpar() {
        cadastroUsuarioVo = new CadastroUsuarioVo();
    }

    public void salvar() {
        try {
            cadastroUsuarioBuilder.buildSalvar(cadastroUsuarioVo);
            setMensagem("Salvo com sucesso!");
            limpar();
        } catch (IllegalArgumentException e) {
            setMensagem(e.getMessage());
        }
    }

    public void deletar() {
        if (principalAction.getUsuarioSession().getUsuarioVo().getEmail().equals(cadastroUsuarioVo.getUsuarioVo().getEmail())) {
            setMensagem("Não é possível remover usuário da sessão");            
            return;
        }
        try {
            cadastroUsuarioBuilder.buildDeletar(cadastroUsuarioVo.getUsuarioVo());
            setMensagem("Deletado com sucesso");
            limpar();
        } catch (IllegalArgumentException e) {
            setMensagem(e.getMessage());
        }
    }
    
    public String consultaUsuario() {
        Navigator.setPage(Pages.cadastroUsuario.name());
        return Pages.consultaUsuario.name();
    }    
    
    public CadastroUsuarioVo getCadastroUsuarioVo() {
        return cadastroUsuarioVo;
    }

    public void setCadastroUsuarioVo(CadastroUsuarioVo cadastroUsuarioVo) {
        this.cadastroUsuarioVo = cadastroUsuarioVo;
    }
    
}